본문으로 건너뛰기

위젯의 독립성

왜 ProductList 위젯에서 상품을 추가할 때 UI의 변화가 일어 나지 않는가?

  • debugPrint() 시 item의 개수는 증가한다.
  • 그치만 item개수를 참조하고 있는 UI의 값은 변경되지 않는다.

위젯의 독립성

  • 이유는 Flutter의 위젯이 독립적으로 상태를 관리하고 있기 때문
  • 각 위젯은 자체적인 상태와 빌드 메서드를 가지고 있어 다른 위젯과 분리된 상태로 UI를 구성

UI변화가 없는 이유

  • **ProductList**와 MyCart 위젯이 서로 상태를 공유하지 않기 때문
  • **ProductList**에서 item의 상태가 변경되더라도 **MyCart**는 이를 인지하지 못함

위젯간 상태를 공유하는 방법은?

State Lifting

  • 상태를 공유해야 하는 자식 위젯들이 공통으로 가지고 있는 부모 위젯으로 상태를 끌어올려서 관리하는 방법
  • 이 방법으로 부모 위젯이 상태를 관리하고, 자식 위젯들이 부모 위젯으로부터 상태를 받아 사용

단계

  1. 상태를 관리할 부모 위젯 정의
  2. 자식 위젯에서 부모 위젯의 상태를 사용
  3. 자식 위젯에서 부모 위젯의 상태를 업데이트

문제점

상태 관리의 복잡성 증가

  • 상태를 공유하는 자식 위젯들이 많아질수록 상위 위젯의 상태 관리가 복잡해짐

위젯 재구성의 비용 증가

  • 부모 위젯의 상태가 변경되면 그 상태를 참조하는 모든 자식 위젯이 다시 빌드되어 성능 이슈

코드의 분리 어려움

  • 상태와 UI 로직이 하나의 위젯에 집중

해결방법

상태관리 패키지를 사용한다.

  • Provider
  • RiverPod
  • Bloc